package com.exam.api.modules.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.exam.api.modules.system.domain.TblUser;
import com.exam.api.modules.system.dto.*;
import com.exam.api.modules.system.vo.BasicUserInfo;
import com.exam.api.modules.system.vo.LoginUserInfo;
import com.exam.api.modules.system.vo.UserVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * 用户逻辑接口类
 *
 * @author bcheng
 */
public interface TblUserService extends IService<TblUser> {

    /**
     * 修改密码
     * @param dto 修改密码信息
     */
    void updatePassword(UpdatePasswordDTO dto);

    /**
     * 获取当前登录用户
     *
     * @return 用户
     */
    LoginUserInfo getLoginUser();

    /**
     * 根据用户名查询用户
     *
     * @param username 用户名 （手机号、工号）
     * @return 用户
     */
    Optional<TblUser> getUserByUsername(String username);


    /**
     * 分页查询用户
     *
     * @param dto 查询条件
     * @return 分页数据
     */
    IPage<UserVO> pageUser(UserPageDTO dto);

    /**
     * 根据用户id查询用户
     *
     * @param dto 用户id
     * @return 用户
     */
    LoginUserInfo getUser(UserIdDTO dto);

    /**
     * 新增用户
     *
     * @param dto 新增用户信息
     */
    void addUser(UserAddDTO dto);

    /**
     * 修改用户
     *
     * @param dto 修改用户信息
     */
    void updateUser(UserUpdateDTO dto);

    /**
     * 删除用户
     *
     * @param dto 用户id
     */
    void deleteUser(UserIdDTO dto);

    /**
     * 重置密码
     * @param dto 用户id
     */
    void restPassword(UserIdDTO dto);

    Map<Long, String> getNickNameMap(Collection<Long> ids);

    List<Long> listUserIdByNickName(String name);

    List<Long> listUserIdByDeptIds(Collection<Long> deptIds);

    String getNickNameById(Serializable userId);

    List<BasicUserInfo> listBasicUserInfos(UserBasicQueryDTO dto);
}
